home *** CD-ROM | disk | FTP | other *** search
/ DS-CD ROM 2 1993 August / DS CD-ROM 2.Ausgabe (August 1993).iso / programm / ds0257 / lib.exe / MSTACK.LIB < prev    next >
Text File  |  1992-02-02  |  3KB  |  205 lines

  1. #IF !LIB4A86
  2. #ELSE
  3. #IF !INTERN_LIB4A86_S
  4. INTERN_LIB4A86_S EQU 01
  5. JMP START
  6. #ENDIF
  7. #ENDIF
  8. MSTACKHEADER STRUC
  9. MSTACKLENGTH DW ?
  10. MSTACKFREE DW ?
  11. MSTACKSPTR DW ?
  12. MSTACKCOUNT DW ?
  13. MSTACKSEM DB ?
  14. MSTACKDUMMY DB ?
  15. MSTACKDUMMY1 DB ?
  16. MSTACKUSERDATA1 DW ?
  17. MSTACKUSERDATA2 DW ?
  18. ENDS
  19. MSTACKHEADERLENGTH EQU (TYPE MSTACKHEADER)
  20. FIRSTMSTACKENTRY EQU TYPE ( MSTACKHEADER)
  21. MINMSTACK EQU 256XD
  22. SETMSTACKSEMAPHOR EQU 0FFH
  23. FREEMSTACKSEMAPHOR EQU 000H
  24. MSTACKISEMPTY EQU 08501H
  25. MSTACKISFULL EQU 08502H
  26. MSTACKLENGTHERROR EQU 08503H
  27. MSTACKBUFFERERROR EQU 08504H
  28. MSTACKMESSAGEERROR EQU 08205H
  29. MSTACKAKTIVERROR EQU 082FFH
  30. MSTACKSEG DW 0
  31. INTERN_CHECKMSTACKSEMAPHOR MACRO
  32. MOV AX,MSTACKAKTIVERROR
  33. XCHG ES:MSTACKSEM,AL
  34. CMP AL,FREEMSTACKSEMAPHOR
  35. JE >M1
  36. STC
  37. RET
  38. M1:
  39. #EM
  40. INTERN_FREEMSTACKSEMAPHOR MACRO
  41. MOV ES:MSTACKSEM,FREEMSTACKSEMAPHOR
  42. #EM
  43. INITMSTACK:
  44. CMP CX,MINMSTACK
  45. JAE >L1
  46. MOV AX,MSTACKLENGTHERROR
  47. STC
  48. RET
  49. L1:
  50. MOV CS:MSTACKSEG,ES
  51. MOV ES:MSTACKSEM,SETMSTACKSEMAPHOR
  52. MOV ES:MSTACKLENGTH,CX
  53. INTERN_DELETEMSTACK:
  54. SUB CX,MSTACKHEADERLENGTH
  55. MOV ES:MSTACKFREE,CX
  56. MOV AX,FIRSTMSTACKENTRY
  57. MOV ES:MSTACKSPTR,AX
  58. XOR AX,AX
  59. MOV ES:MSTACKCOUNT,AX
  60. INTERN_FREEMSTACKSEMAPHOR
  61. RET
  62. DELETEMSTACK_A:
  63. MOV ES,CS:MSTACKSEG
  64. DELETEMSTACK:
  65. INTERN_CHECKMSTACKSEMAPHOR
  66. MOV CX,ES:MSTACKLENGTH
  67. JMP SHORT INTERN_DELETEMSTACK
  68. LOCKMSTACK_A:
  69. MOV ES,CS:MSTACKSEG
  70. LOCKMSTACK:
  71. INTERN_CHECKMSTACKSEMAPHOR
  72. RET
  73. UNLOCKMSTACK_A:
  74. MOV ES,CS:MSTACKSEG
  75. UNLOCKMSTACK:
  76. INTERN_FREEMSTACKSEMAPHOR
  77. RET
  78. GETMSTACKSTATISTIK_A:
  79. MOV ES,CS:MSTACKSEG
  80. GETMSTACKSTATISTIK:
  81. INTERN_CHECKMSTACKSEMAPHOR
  82. MOV DX,ES:MSTACKLENGTH
  83. SUB DX,MSTACKHEADERLENGTH
  84. MOV CX,ES:MSTACKFREE
  85. MOV AX,ES:MSTACKCOUNT
  86. MOV BX,ES:MSTACKSPTR
  87. INTERN_FREEMSTACKSEMAPHOR
  88. RET
  89. WRITEMSTACK_A:
  90. MOV ES, CS:MSTACKSEG
  91. WRITEMSTACK:
  92. CLD
  93. INTERN_CHECKMSTACKSEMAPHOR
  94. PUSH DI,SI,CX
  95. MOV AX,MSTACKMESSAGEERROR
  96. OR CH,CH
  97. JNZ >L8
  98. INC CX
  99. MOV AX,ES:MSTACKFREE
  100. CMP CX,AX
  101. JBE >L1
  102. DEC AX
  103. POP CX
  104. PUSH AX
  105. MOV AX,MSTACKISFULL
  106. JMP >L8
  107. L1:
  108. INC ES:MSTACKCOUNT
  109. SUB ES:MSTACKFREE,CX
  110. DEC CX
  111. PUSH CX
  112. MOV DI,ES:MSTACKSPTR
  113. REP MOVSB
  114. POP CX
  115. MOV ES:[DI],CL
  116. INC DI
  117. MOV ES:MSTACKSPTR,DI
  118. CLC
  119. JMP >L9
  120. L8:
  121. STC
  122. L9:
  123. POP CX,SI,DI
  124. INTERN_FREEMSTACKSEMAPHOR
  125. RET
  126. LOOKMSTACK_A:
  127. MOV ES,CS:MSTACKSEG
  128. LOOKMSTACK:
  129. XOR CX,CX
  130. JMP SHORT READMSTACK
  131. READMSTACK_A:
  132. MOV ES, CS:MSTACKSEG
  133. READMSTACK:
  134. CLD
  135. INTERN_CHECKMSTACKSEMAPHOR
  136. PUSH ES,DS,DI,SI,DX
  137. MOV DX,CX
  138. XCHG ES,DS
  139. MOV DI,MSTACKSPTR
  140. XCHG DI,SI
  141. XOR CX,CX
  142. MOV AX,MSTACKISEMPTY
  143. CMP MSTACKCOUNT,CX
  144. JE >L8
  145. L1:
  146. DEC SI
  147. MOV CL,[SI]
  148. SUB SI,CX
  149. OR DX,DX
  150. JNZ >L1
  151. JCXZ >L9
  152. MOV AL,[SI]
  153. JMP >L9
  154. L1:
  155. MOV AX,MSTACKBUFFERERROR
  156. CMP DX,CX
  157. JB >L8
  158. PUSH SI
  159. MOV DX,CX
  160. REP MOVSB
  161. POP SI
  162. MOV MSTACKSPTR,SI
  163. DEC MSTACKCOUNT
  164. MOV CX,DX
  165. INC DX,1
  166. ADD MSTACKFREE,DX
  167. CLC
  168. JMP >L9
  169. L8:
  170. STC
  171. L9:
  172. POP DX,SI,DI,DS,ES
  173. INTERN_FREEMSTACKSEMAPHOR
  174. RET
  175. #IF !INTERN_CMARK0
  176. INTERN_CMARK0 EQU 01H
  177. INTERN_CMARK1:
  178. PUSH BP
  179. MOV BP,SP
  180. MOV BX,06H
  181. SUB CH,[BP+SI]
  182. SUB AH,[BX+SI]
  183. DEC SP
  184. DEC CX
  185. INC DX
  186. XOR AL,041H
  187. CMP B[02820H],DH
  188. INC BX
  189. SUB W[BX+SI],SP
  190. INC DX
  191. CS AND B[BP+DI+043H],DL
  192. DEC AX
  193. INC BP
  194. DEC BP
  195. DEC BP
  196. INC BP
  197. PUSH DX
  198. AND B[BP+SI],CH
  199. SUB CH,[BP+SI]
  200. POP DX
  201. MOV SP,BP
  202. POP BP
  203. RET
  204. #ENDIF
  205.